// -----------------------------
// Author: 		Dhaenens Gert 
// Creation: 	12/3/2014 7:31:51 PM				
// -----------------------------

#ifndef _Material_h
#define _Material_h

#include "RefObject.h"

class Application;
class RenderManager;

class Material : public RefObject
{
public:
	enum class RenderType
	{
		Forward,
		Deferred,
	};

	Matrix	m_World;
	Matrix	m_View;
	Matrix	m_Projection;

	virtual void	Apply(Application* lpApp);
	virtual void	UpdateMatrices(Application* lpApp);
	virtual void	UpdateData(Application* lpApp);

	RenderType		GetRenderType() const;
	Bool			IsTwoSided() const;

protected:

	Material(Application* lpApp, RenderType eRenderType, Bool bTwoSided);
	virtual ~Material();

	RenderManager*	m_lpRenderManager;
	RenderType		m_eRenderType;
	Bool			m_bTwoSided;

private:

	Material(const Material& refMaterial);
	Material& operator=(const Material& refMaterial);
};

#endif